package com.tito.common.framework.service;

//import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.tito.common.api.PageInfo;
import com.tito.common.api.query.QueryParams;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 公共基础接口，业务类继续该接口后可自动获得一系统公共禁准的接口定义
 * @param <T>
 */
public interface IBaseService<T>{

    public List<T> listObjs(QueryParams<T> params);

    boolean save(T entity);

    default boolean saveBatch(Collection<T> entityList) {
        return this.saveBatch(entityList, 30);
    }

    boolean saveBatch(Collection<T> entityList, int var2);

    boolean saveOrUpdateBatch(Collection<T> entityList);

    boolean saveOrUpdateBatch(Collection<T> entityList, int var2);

    boolean removeById(Serializable var1);

    boolean removeByMap(Map<String, Object> var1);

//    boolean remove(Wrapper<T> var1);

    public boolean remove(QueryParams<T> params);

    boolean removeByIds(Collection<? extends Serializable> var1);

    boolean updateById(T entity);

//    boolean update(T entity, Wrapper<T> var2);

    boolean update(T entity, QueryParams<T> var2);

    default boolean updateBatchById(Collection<T> entityList) {
        return this.updateBatchById(entityList, 30);
    }

    boolean updateBatchById(Collection<T> entityList, int var2);

    boolean saveOrUpdate(T entity);

    T getById(Serializable var1);

    Collection<T> listByIds(Collection<? extends Serializable> entityList);

    Collection<T> listByMap(Map<String, Object> var1);

    /*default T getOne(Wrapper<T> queryWrapper) {
        return this.getOne(queryWrapper, false);
    }

    T getOne(Wrapper<T> var1, boolean var2);*/
    default T getOne(QueryParams<T> queryWrapper) {
        return this.getOne(queryWrapper, false);
    }

    T getOne(QueryParams<T> var1, boolean var2);


//    Map<String, Object> getMap(Wrapper<T> var1);

//    Object getObj(Wrapper<T> var1);

//    int count(Wrapper<T> var1);

//    List<T> list(Wrapper<T> var1);

//    List<T> list(Wrapper<T> var1);

    List<T> list(QueryParams<T> var1);

    public PageInfo<T> page(PageInfo<T> pageInfo, QueryParams<T> queryWrapper);

//    IPage<T> page(IPage<T> var1, Wrapper<T> var2);

    List<Map<String, Object>> listMaps(QueryParams<T> var1);

//    List<Object> listObjs(Wrapper<T> var1);

//    IPage<Map<String, Object>> pageMaps(IPage<T> var1, Wrapper<T> var2);
    PageInfo<Map<String, Object>> pageMaps(PageInfo<T> var1, QueryParams<T> var2);
}
